package main

import (
	"fmt"
	"time"
)

//对于chan类型，初始化时如果没有指定大小，默认为0，则表示chan没有缓冲

func main(){
	fmt.Println("----------channel---------",time.Now())
	test2()
}

func test1(){
	// 创建一个channel用以同步goroutine
	c:=make(chan int)
	
	// 在goroutine中执行输出操作
	go func(){
		time.Sleep(time.Second*2)
		fmt.Println("goroutine message")
		// 告诉main函数执行完毕.
        // 这个channel在goroutine中是可见的
        // 因为它是在相同的地址空间执行的.
		c<-3
	}()
	
	fmt.Println("main func message")
	<-c // 等待goroutine结束
}

func test2(){
	msg:=make(chan string,3)//
	
	count:=5
	go func(){
		for i:=1;i<=count;i++{
			fmt.Println("send message start",i)
			msg<-fmt.Sprintf("message %d",i)
//			fmt.Println("send message  end ",i)
//			time.Sleep(time.Second*2)
		}
	}()
	
	time.Sleep(time.Second*3)
	
	for i:=1;i<=count;i++{
		fmt.Println(<-msg)
	}
	
	
}